package ConexaoBackupBD;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class BackupRestoreBD {
    
    public void backup() {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setDialogTitle("Selecione o caminho para realizar o backup");

        int variableChooser = fileChooser.showSaveDialog(null);

        if (variableChooser != JFileChooser.APPROVE_OPTION) {
            JOptionPane.showMessageDialog(null, "Backup não realizado", "Janela finalizada", JOptionPane.CANCEL_OPTION);
        } else {
            String commandDump = "";

            if (System.getProperty("os.name").toUpperCase().compareTo("LINUX") == 0) {
                    commandDump = "/usr/bin/mysqldump";
            } else {				
                    commandDump = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe";
            }

            String location = fileChooser.getSelectedFile() + ".sql";
            ProcessBuilder pb = new ProcessBuilder(commandDump, "--user=root",
                            "--password=root", "--databases", "smap", "--result-file=" + location);
            try {
                pb.start();
                JOptionPane.showMessageDialog(null, "Backup efetuado com sucesso");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                JOptionPane.showMessageDialog(null, e.toString(), 
                        "Erro ao realizar backup", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
   
    public void restore() {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setDialogTitle("Selecione o caminho do arquivo para realizar o restore");
        
        int variableChooser = fileChooser.showOpenDialog(null);
        
        if (variableChooser != JFileChooser.APPROVE_OPTION) {
            JOptionPane.showMessageDialog(null, "Restore não realizado", "Janela finalizada", JOptionPane.CANCEL_OPTION);
        } else {
            String commandDump = "";

            if (System.getProperty("os.name").toUpperCase().compareTo("LINUX") == 0) {
                    commandDump = "/usr/bin/mysql";
            } else {				
                    commandDump = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysql.exe";
            }

            String location = "" + fileChooser.getSelectedFile();

            String[] executeCmd = new String[]{commandDump, "--user=root", "--password=root", "-e", "source "+location};

            Process runtimeProcess;               
            try {                    
                runtimeProcess = Runtime.getRuntime().exec(executeCmd);
                int processComplete = runtimeProcess.waitFor();
                if (processComplete == 0) {
                    JOptionPane.showMessageDialog(null, "Restore efetuado com sucesso");
                } else {
                    JOptionPane.showMessageDialog(null, "Não foi possivel restaurar o backup",
                            "Erro no restore" ,JOptionPane.ERROR_MESSAGE);
                }
            } catch (Exception ex) {
                //verificar se é pra exibir esta mensagem de alerta
                //ex.printStackTrace();
                JOptionPane.showMessageDialog(null, "Não foi possivel restaurar o backup",
                            "Erro no restore" ,JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    
    public void instalarBD() {
        
        String commandDump = "";
        if (System.getProperty("os.name").toUpperCase().compareTo("LINUX") == 0) {
                commandDump = "/usr/bin/mysql";
        } else {				
                commandDump = "C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysql.exe";
        }
        
        String location = "./src/ConexaoBackupBD/Instalar.sql";
        String[] executeCmd = new String[]{commandDump, "--user=root", "--password=root", "-e", "source "+location};

        Process runtimeProcess;               
        try {                    
            runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();
            if (processComplete == 0) {
                JOptionPane.showMessageDialog(null, "Instalação realizada com sucesso");
            } else {
                JOptionPane.showMessageDialog(null, "Não foi possível restaurar o backup",
                        "Erro no restore" ,JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception ex) {
            //verificar se é pra exibir esta mensagem de alerta
            //ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "Não foi possível instalar o banco de dados",
                        "Erro na instalação" ,JOptionPane.ERROR_MESSAGE);
        }
    }
}
